Skip to content

Instantly share code, notes, and snippets.

@kotarak
Created August 7, 2013 11:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kotarak/6173256 to your computer and use it in GitHub Desktop.
Save kotarak/6173256 to your computer and use it in GitHub Desktop.
You can write Lisp in any language.
def loadMethod = ZweigBuilder.toNode([
method: "load",
modifier: ["public", "static"],
returnType: ClassHelper.VOID_TYPE,
body: [
[if: [not: flagField],
then: [on: mutexField,
synchronize: [
[if: [not: flagField],
then: [do: [
[callStatic: methodNode.name,
on: extensionClass],
[set: flagField,
to: true]]]]]]]
]
])
def loadMethod = new MethodNode(
"load",
Modifier.PUBLIC | Modifier.STATIC,
ClassHelper.VOID_TYPE,
[] as Parameter[],
[] as ClassNode[],
new BlockStatement(
[new IfStatement(
new NotExpression(new FieldExpression(flagField)),
new SynchronizedStatement(
new FieldExpression(mutexField),
new BlockStatement(
[new IfStatement(
new NotExpression(new FieldExpression(flagField)),
new BlockStatement(
[new ExpressionStatement(
new StaticMethodCallExpression(
extensionClass,
methodNode.name,
ArgumentListExpression.EMPTY_ARGUMENTS
)
),
new ExpressionStatement(
new BinaryExpression(
new FieldExpression(flagField),
new Token(Types.ASSIGN, "=", -1, -1),
new ConstantExpression(true)
)
)] as Statement[],
new VariableScope()
),
EmptyStatement.INSTANCE
)] as Statement[],
new VariableScope()
)
),
EmptyStatement.INSTANCE
)] as Statement[],
new VariableScope()
)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment