aboutsummaryrefslogtreecommitdiff
path: root/compiler/elymasGlobal.ey
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2013-12-31 00:54:59 +0100
committerDrahflow <drahflow@gmx.de>2013-12-31 00:54:59 +0100
commit643d6dca1e6026ebf8cfa551ae3e95cc69003c47 (patch)
treedf79289945ee98efee9be9ca201eb1a6fda8c840 /compiler/elymasGlobal.ey
parent9699795a62506f69cb83fa35cb58e7641690eb5f (diff)
Less memory usage still
Also, sys .opt now needs less luck to execute correctly.
Diffstat (limited to 'compiler/elymasGlobal.ey')
-rw-r--r--compiler/elymasGlobal.ey32
1 files changed, 32 insertions, 0 deletions
diff --git a/compiler/elymasGlobal.ey b/compiler/elymasGlobal.ey
index ba1cbca..4bc5075 100644
--- a/compiler/elymasGlobal.ey
+++ b/compiler/elymasGlobal.ey
@@ -2146,6 +2146,38 @@
:retn
]] /ey.? defv
+ # test whether a scope member exists without following parent pointers
+ # 0 -> member name
+ # 1 -> scope
+ # 0 <- 1 if scope member exists directly in scope, 0 otherwise
+ [[
+ 8 /r15 :subqImm8Reg
+ /r15 :popqMem
+
+ /rsi :popqReg # fetch identifier
+ /rdi :popqReg # fetch scope
+ ::internalResolve /rax :movqImmReg
+ /rax :callqReg
+
+ /rax /rax :testqRegReg
+ /unresolvedZero :jzLbl8
+ /rdi /rdi :testqRegReg
+ /unresolved :jnzLbl8
+ 1 /rax :movqImmReg
+ /resolved :jmpLbl8
+
+ @unresolved
+ /rax /rax :xorqRegReg
+ @unresolvedZero
+ @resolved
+ 63 /rax :btsqImm8Reg
+ /rax :pushqReg
+
+ /r15 :pushqMem
+ 8 /r15 :addqImm8Reg
+ :retn
+ ]] /ey.?' defv
+
# enumerate scope keys
# 0 -> scope
# 0 <- array of keys