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 / AddCodeFromMetaobject.cyan
Last active August 30, 2022 08:15
Metaobjects addCodeToGenericPrototype and AddCodeFromMetaobject
package metaobjectTest
/*
@addCodeFromMetaobject is in prototype Array. The annotation
addCodeToGenericPrototype gives the code to be added to the
array of prototype AddCodeFromMetaobject.
*/
@addCodeToGenericPrototype("Array", " func sumAll -> Int"){*
@joseoliv
joseoliv / AddBeforeMethod.cyan
Last active April 23, 2021 14:23
Metaobject addBeforeMethod
package metaobjectTest
@addBeforeMethod("zero", "logStr = logStr ++ \"called zero\";")
object AddBeforeMethod
func run {
assert zero == 0;
assert logStr == "called zero";
}
@joseoliv
joseoliv / AddMethodTo.cyan
Last active August 30, 2022 08:17
Metaobject addMethodTo
package metaobjectTest
@addMethodTo("func zero -> Int", "func zero -> Int = 0;")
@addMethodTo(
"""func len: String s less: Int -> Int""",
"""
func len: String s less: Int n -> Int { return s size - n}
""")
object AddMethodTo
@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";