Skip to content

Instantly share code, notes, and snippets.

View joseoliv's full-sized avatar

José de Oliveira Guimarães joseoliv

View GitHub Profile
@joseoliv
joseoliv / p.pyan
Created June 13, 2018 23:08
Metaobject addToSet
@addToSet("debug", "yes")
@addToSet("author", "Jose")
program
@joseoliv
joseoliv / Annot.cyan
Created June 13, 2018 23:18
Metaobject annot
package metaobjectTest
@annot("correct this")
@annot( [ 2, 3, 5, 7 ] )
object Annot
func run {
var Int count = 0;
@joseoliv
joseoliv / Range.cyan
Created June 15, 2018 08:57
Metaobject range
package metaobjectTest
@doc{*
Ranges are attached to types. A variable of type Int@range(first, last)
can only contain values between first and last (inclusive). This is
checked at compile-time when a literal is assigned to the variable
and at run-time if an expression is assigned to the variable.
*}
object Range
@joseoliv
joseoliv / Regex.cyan
Created June 15, 2018 09:10
Metaobject regex
package metaobjectTest
@doc{*
usage:
String@regex(re)
regex checks if the variable holds only strings that match the
regular expression re.
*}
object Regex
@joseoliv
joseoliv / p.pyan
Created June 15, 2018 13:22
This is the project file for the program 'metaobject' that has examples of metaobjects
@addToSet(debug, "yes")
@addToSet(author, "Jose")
/* Because of this association, prototype 'TaintedToUntainted'
of package 'untainted' can cast expressions of type
T@tainted to T@untainted in which T is any type.
*/
@addToSet(untaintedDoNotCheckIn, "untainted.TaintedToUntainted")
program
main metaobjectTest.Program
@joseoliv
joseoliv / TaintedToUntainted.cyan
Created June 15, 2018 13:24
Prototype that can convert any tainted to untainted value
package untainted
object TaintedToUntainted
func toUntaintedSql: String@tainted(sql) s -> String@untainted(sql) = s;
func toUntaintedHtml: String@tainted(html) s -> String@untainted(html) = s;
end
@joseoliv
joseoliv / Tainted
Created June 15, 2018 13:28
Metaobjects tainted and untainted
package metaobjectTest
import untainted
object Tainted
func run {
var String@tainted(sql) maliciousSqlCode =
"I will delete your database";
@joseoliv
joseoliv / Type.cyan
Created June 22, 2018 01:34
Metaobject Type
package metaobjectTest
@doc{*
Annotation 'type' should be attached to a type. It works
much like a language-C typedef but without the explicit
declaration. Every type T@type(id) is compatible only with literals
and types annotated with T@type(id) (both should have the same 'id').
*}
object Type
@joseoliv
joseoliv / CallTestMethods.cyan
Created June 22, 2018 15:06
Metaobject callTestMethods
package metaobjectTest
@doc{*
callTestMethods generates code that calls all methods of
the current prototype whose name ends with 'Test'. It
is the same as to use annotation @callUnaryMethods(".*Test")
*}
object CallTestMethods
func run {
@joseoliv
joseoliv / CallUnaryMethods.cyan
Created June 22, 2018 17:57
Metaobject callUnaryMethods
package metaobjectTest
@doc{*
callUnaryMethods generates code that calls all methods of
the current prototype whose name matches with the pattern
that is the annotation parameter.
*}
object CallUnaryMethods
func run {