Index: src/x64/assembler-x64.cc |
diff --git a/src/x64/assembler-x64.cc b/src/x64/assembler-x64.cc |
index 38b7a1b5e1473ee1a6fb0ac79e412377ddec5cda..ba091c95b473212bce4dab484d5182eb80ab947c 100644 |
--- a/src/x64/assembler-x64.cc |
+++ b/src/x64/assembler-x64.cc |
@@ -34,48 +34,24 @@ namespace v8 { namespace internal { |
Register no_reg = { -1 }; |
-} } // namespace v8::internal |
- |
+// Safe default is no features. |
+uint64_t CpuFeatures::supported_ = 0; |
+uint64_t CpuFeatures::enabled_ = 0; |
-// TODO(x64): Implement and move these to their correct cc-files: |
-#include "assembler.h" |
-#include "ast.h" |
-#include "bootstrapper.h" |
-#include "codegen-inl.h" |
-#include "cpu.h" |
-#include "debug.h" |
-#include "disasm.h" |
-#include "disassembler.h" |
-#include "frames-inl.h" |
-#include "x64/macro-assembler-x64.h" |
-#include "x64/regexp-macro-assembler-x64.h" |
-#include "ic-inl.h" |
-#include "log.h" |
-#include "macro-assembler.h" |
-#include "parser.h" |
-#include "regexp-macro-assembler.h" |
-#include "regexp-stack.h" |
-#include "register-allocator-inl.h" |
-#include "register-allocator.h" |
-#include "runtime.h" |
-#include "scopes.h" |
-#include "serialize.h" |
-#include "stub-cache.h" |
-#include "unicode.h" |
- |
-namespace v8 { namespace internal { |
- |
-void ArgumentsAccessStub::GenerateNewObject(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
+void CpuFeatures::Probe() { |
+ // TODO(X64): UNIMPLEMENTED |
} |
-void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
+// ----------------------------------------------------------------------------- |
+// Implementation of Assembler |
-void ArgumentsAccessStub::GenerateReadLength(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
+// Emit a single byte. Must always be inlined. |
+#define EMIT(x) \ |
+ *pc_++ = (x) |
Dean McNamee
2009/05/20 13:09:42
really needs to be 2 lines?
|
+ |
+#ifdef GENERATED_CODE_COVERAGE |
+static void InitCoverageLog(); |
+#endif |
// ----------------------------------------------------------------------------- |
// Implementation of Assembler |
@@ -167,7 +143,6 @@ void Assembler::Align(int m) { |
} |
} |
- |
void Assembler::RecordComment(char const* a) { |
UNIMPLEMENTED(); |
} |
@@ -184,311 +159,183 @@ void Assembler::bind(Label* a) { |
UNIMPLEMENTED(); |
} |
- |
void Assembler::nop() { |
UNIMPLEMENTED(); |
} |
+void Assembler::GrowBuffer() { |
+ ASSERT(overflow()); // should not call this otherwise |
+ if (!own_buffer_) FATAL("external code buffer is too small"); |
-void BreakLocationIterator::ClearDebugBreakAtReturn() { |
- UNIMPLEMENTED(); |
-} |
- |
-bool BreakLocationIterator::IsDebugBreakAtReturn() { |
- UNIMPLEMENTED(); |
- return false; |
-} |
- |
-void BreakLocationIterator::SetDebugBreakAtReturn() { |
- UNIMPLEMENTED(); |
-} |
- |
-void CEntryStub::GenerateBody(MacroAssembler* a, bool b) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CallIC::Generate(MacroAssembler* a, int b, ExternalReference const& c) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CallIC::GenerateMegamorphic(MacroAssembler* a, int b) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CallIC::GenerateNormal(MacroAssembler* a, int b) { |
- UNIMPLEMENTED(); |
-} |
- |
-Object* CallStubCompiler::CompileCallConstant(Object* a, |
- JSObject* b, |
- JSFunction* c, |
- StubCompiler::CheckType d) { |
- UNIMPLEMENTED(); |
- return NULL; |
-} |
- |
-Object* CallStubCompiler::CompileCallField(Object* a, |
- JSObject* b, |
- int c, |
- String* d) { |
- UNIMPLEMENTED(); |
- return NULL; |
-} |
- |
-Object* CallStubCompiler::CompileCallInterceptor(Object* a, |
- JSObject* b, |
- String* c) { |
- UNIMPLEMENTED(); |
- return NULL; |
-} |
- |
-CodeGenerator::CodeGenerator(int buffer_size, |
- Handle<Script> script, |
- bool is_eval) |
- : is_eval_(is_eval), |
- script_(script), |
- deferred_(8), |
- masm_(new MacroAssembler(NULL, buffer_size)), |
- scope_(NULL), |
- frame_(NULL), |
- allocator_(NULL), |
- state_(NULL), |
- loop_nesting_(0), |
- function_return_is_shadowed_(false), |
- in_spilled_code_(false) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::DeclareGlobals(Handle<FixedArray> a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::GenCode(FunctionLiteral* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::GenerateFastCaseSwitchJumpTable(SwitchStatement* a, |
- int b, |
- int c, |
- Label* d, |
- Vector<Label*> e, |
- Vector<Label> f) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitStatements(ZoneList<Statement*>* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitBlock(Block* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitDeclaration(Declaration* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitExpressionStatement(ExpressionStatement* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitEmptyStatement(EmptyStatement* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitIfStatement(IfStatement* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitContinueStatement(ContinueStatement* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitBreakStatement(BreakStatement* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitReturnStatement(ReturnStatement* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitWithEnterStatement(WithEnterStatement* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitWithExitStatement(WithExitStatement* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitSwitchStatement(SwitchStatement* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitLoopStatement(LoopStatement* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitForInStatement(ForInStatement* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitTryCatch(TryCatch* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitTryFinally(TryFinally* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitDebuggerStatement(DebuggerStatement* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitFunctionLiteral(FunctionLiteral* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitFunctionBoilerplateLiteral( |
- FunctionBoilerplateLiteral* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitConditional(Conditional* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitSlot(Slot* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitVariableProxy(VariableProxy* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitLiteral(Literal* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void CodeGenerator::VisitRegExpLiteral(RegExpLiteral* a) { |
- UNIMPLEMENTED(); |
-} |
+ // compute new buffer size |
+ CodeDesc desc; // the new buffer |
+ if (buffer_size_ < 4*KB) { |
+ desc.buffer_size = 4*KB; |
+ } else { |
+ desc.buffer_size = 2*buffer_size_; |
+ } |
+ // Some internal data structures overflow for very large buffers, |
+ // they must ensure that kMaximalBufferSize is not too large. |
+ if ((desc.buffer_size > kMaximalBufferSize) || |
+ (desc.buffer_size > Heap::OldGenerationSize())) { |
+ V8::FatalProcessOutOfMemory("Assembler::GrowBuffer"); |
+ } |
-void CodeGenerator::VisitObjectLiteral(ObjectLiteral* a) { |
- UNIMPLEMENTED(); |
-} |
+ // setup new buffer |
+ desc.buffer = NewArray<byte>(desc.buffer_size); |
+ desc.instr_size = pc_offset(); |
+ desc.reloc_size = (buffer_ + buffer_size_) - (reloc_info_writer.pos()); |
-void CodeGenerator::VisitArrayLiteral(ArrayLiteral* a) { |
- UNIMPLEMENTED(); |
-} |
+ // Clear the buffer in debug mode. Use 'int3' instructions to make |
+ // sure to get into problems if we ever run uninitialized code. |
+#ifdef DEBUG |
+ memset(desc.buffer, 0xCC, desc.buffer_size); |
+#endif |
-void CodeGenerator::VisitCatchExtensionObject(CatchExtensionObject* a) { |
- UNIMPLEMENTED(); |
-} |
+ // copy the data |
+ int pc_delta = desc.buffer - buffer_; |
+ int rc_delta = (desc.buffer + desc.buffer_size) - (buffer_ + buffer_size_); |
+ memmove(desc.buffer, buffer_, desc.instr_size); |
+ memmove(rc_delta + reloc_info_writer.pos(), |
+ reloc_info_writer.pos(), desc.reloc_size); |
-void CodeGenerator::VisitAssignment(Assignment* a) { |
- UNIMPLEMENTED(); |
-} |
+ // switch buffers |
+ if (spare_buffer_ == NULL && buffer_size_ == kMinimalBufferSize) { |
+ spare_buffer_ = buffer_; |
+ } else { |
+ DeleteArray(buffer_); |
+ } |
+ buffer_ = desc.buffer; |
+ buffer_size_ = desc.buffer_size; |
+ pc_ += pc_delta; |
+ if (last_pc_ != NULL) { |
+ last_pc_ += pc_delta; |
+ } |
+ reloc_info_writer.Reposition(reloc_info_writer.pos() + rc_delta, |
+ reloc_info_writer.last_pc() + pc_delta); |
+ |
+ // relocate runtime entries |
+ for (RelocIterator it(desc); !it.done(); it.next()) { |
+ RelocInfo::Mode rmode = it.rinfo()->rmode(); |
+ if (rmode == RelocInfo::RUNTIME_ENTRY) { |
+ int32_t* p = reinterpret_cast<int32_t*>(it.rinfo()->pc()); |
William Hesse
2009/05/20 13:13:48
pc() is a byte*. If you want to manipulate it as
Lasse Reichstein
2009/05/20 14:25:42
Actually, it's not the pointer that is treated as
|
+ *p -= pc_delta; // relocate entry |
+ } else if (rmode == RelocInfo::INTERNAL_REFERENCE) { |
+ int32_t* p = reinterpret_cast<int32_t*>(it.rinfo()->pc()); |
+ if (*p != 0) { // 0 means uninitialized. |
+ *p += pc_delta; |
+ } |
+ } |
+ } |
-void CodeGenerator::VisitThrow(Throw* a) { |
- UNIMPLEMENTED(); |
+ ASSERT(!overflow()); |
} |
-void CodeGenerator::VisitProperty(Property* a) { |
- UNIMPLEMENTED(); |
-} |
-void CodeGenerator::VisitCall(Call* a) { |
- UNIMPLEMENTED(); |
+void Assembler::int3() { |
+ EnsureSpace ensure_space(this); |
+ last_pc_ = pc_; |
+ EMIT(0xCC); |
} |
-void CodeGenerator::VisitCallEval(CallEval* a) { |
- UNIMPLEMENTED(); |
-} |
+} } // namespace v8::internal |
-void CodeGenerator::VisitCallNew(CallNew* a) { |
- UNIMPLEMENTED(); |
-} |
-void CodeGenerator::VisitCallRuntime(CallRuntime* a) { |
- UNIMPLEMENTED(); |
-} |
+// TODO(x64): Implement and move these to their correct cc-files: |
+#include "ast.h" |
+#include "bootstrapper.h" |
+#include "codegen-inl.h" |
+#include "cpu.h" |
+#include "debug.h" |
+#include "disasm.h" |
+#include "disassembler.h" |
+#include "frames-inl.h" |
+#include "x64/macro-assembler-x64.h" |
+#include "x64/regexp-macro-assembler-x64.h" |
+#include "ic-inl.h" |
+#include "log.h" |
+#include "macro-assembler.h" |
+#include "parser.h" |
+#include "regexp-macro-assembler.h" |
+#include "regexp-stack.h" |
+#include "register-allocator-inl.h" |
+#include "register-allocator.h" |
+#include "runtime.h" |
+#include "scopes.h" |
+#include "serialize.h" |
+#include "stub-cache.h" |
+#include "unicode.h" |
-void CodeGenerator::VisitUnaryOperation(UnaryOperation* a) { |
- UNIMPLEMENTED(); |
-} |
+namespace v8 { namespace internal { |
-void CodeGenerator::VisitCountOperation(CountOperation* a) { |
+void ArgumentsAccessStub::GenerateNewObject(MacroAssembler* a) { |
UNIMPLEMENTED(); |
} |
-void CodeGenerator::VisitBinaryOperation(BinaryOperation* a) { |
+void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* a) { |
UNIMPLEMENTED(); |
} |
-void CodeGenerator::VisitCompareOperation(CompareOperation* a) { |
+void ArgumentsAccessStub::GenerateReadLength(MacroAssembler* a) { |
UNIMPLEMENTED(); |
} |
-void CodeGenerator::VisitThisFunction(ThisFunction* a) { |
- UNIMPLEMENTED(); |
-} |
-void CpuFeatures::Probe() { |
+void BreakLocationIterator::ClearDebugBreakAtReturn() { |
UNIMPLEMENTED(); |
} |
- |
-bool Debug::IsDebugBreakAtReturn(v8::internal::RelocInfo*) { |
+bool BreakLocationIterator::IsDebugBreakAtReturn() { |
UNIMPLEMENTED(); |
return false; |
} |
-void Debug::GenerateCallICDebugBreak(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void Debug::GenerateConstructCallDebugBreak(MacroAssembler* a) { |
+void BreakLocationIterator::SetDebugBreakAtReturn() { |
UNIMPLEMENTED(); |
} |
-void Debug::GenerateKeyedLoadICDebugBreak(MacroAssembler* a) { |
+void CallIC::Generate(MacroAssembler* a, int b, ExternalReference const& c) { |
UNIMPLEMENTED(); |
} |
-void Debug::GenerateKeyedStoreICDebugBreak(MacroAssembler* a) { |
+void CallIC::GenerateMegamorphic(MacroAssembler* a, int b) { |
UNIMPLEMENTED(); |
} |
-void Debug::GenerateLoadICDebugBreak(MacroAssembler* a) { |
+void CallIC::GenerateNormal(MacroAssembler* a, int b) { |
UNIMPLEMENTED(); |
} |
-void Debug::GenerateReturnDebugBreak(MacroAssembler* a) { |
+Object* CallStubCompiler::CompileCallConstant(Object* a, |
+ JSObject* b, |
+ JSFunction* c, |
+ StubCompiler::CheckType d) { |
UNIMPLEMENTED(); |
+ return NULL; |
} |
-void Debug::GenerateReturnDebugBreakEntry(MacroAssembler* a) { |
+Object* CallStubCompiler::CompileCallField(Object* a, |
+ JSObject* b, |
+ int c, |
+ String* d) { |
UNIMPLEMENTED(); |
+ return NULL; |
} |
-void Debug::GenerateStoreICDebugBreak(MacroAssembler* a) { |
+Object* CallStubCompiler::CompileCallInterceptor(Object* a, |
+ JSObject* b, |
+ String* c) { |
UNIMPLEMENTED(); |
+ return NULL; |
} |
-void Debug::GenerateStubNoRegistersDebugBreak(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
StackFrame::Type ExitFrame::GetStateForFramePointer(unsigned char* a, |
StackFrame::State* b) { |
- UNIMPLEMENTED(); |
+ // TODO(X64): UNIMPLEMENTED |
return NONE; |
} |
-void JSEntryStub::GenerateBody(MacroAssembler* a, bool b) { |
- UNIMPLEMENTED(); |
-} |
- |
int JavaScriptFrame::GetProvidedParametersCount() const { |
UNIMPLEMENTED(); |
return 0; |
@@ -506,129 +353,6 @@ void JumpTarget::DoJump() { |
UNIMPLEMENTED(); |
} |
-void KeyedLoadIC::ClearInlinedVersion(unsigned char* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void KeyedLoadIC::Generate(MacroAssembler* a, ExternalReference const& b) { |
- UNIMPLEMENTED(); |
-} |
- |
-void KeyedLoadIC::GenerateGeneric(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void KeyedLoadIC::GenerateMiss(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-bool KeyedLoadIC::PatchInlinedLoad(unsigned char* a, Object* b) { |
- UNIMPLEMENTED(); |
- return false; |
-} |
- |
-Object* KeyedLoadStubCompiler::CompileLoadArrayLength(String* a) { |
- UNIMPLEMENTED(); |
- return NULL; |
-} |
- |
-Object* KeyedLoadStubCompiler::CompileLoadCallback(String* a, |
- JSObject* b, |
- JSObject* c, |
- AccessorInfo* d) { |
- UNIMPLEMENTED(); |
- return NULL; |
-} |
- |
-Object* KeyedLoadStubCompiler::CompileLoadConstant(String* a, |
- JSObject* b, |
- JSObject* c, |
- Object* d) { |
- UNIMPLEMENTED(); |
- return NULL; |
-} |
- |
-Object* KeyedLoadStubCompiler::CompileLoadField(String* a, |
- JSObject* b, |
- JSObject* c, |
- int d) { |
- UNIMPLEMENTED(); |
- return NULL; |
-} |
- |
-Object* KeyedLoadStubCompiler::CompileLoadFunctionPrototype(String* a) { |
- UNIMPLEMENTED(); |
- return NULL; |
-} |
- |
-Object* KeyedLoadStubCompiler::CompileLoadInterceptor(JSObject* a, |
- JSObject* b, |
- String* c) { |
- UNIMPLEMENTED(); |
- return NULL; |
-} |
- |
-Object* KeyedLoadStubCompiler::CompileLoadStringLength(String* a) { |
- UNIMPLEMENTED(); |
- return NULL; |
-} |
- |
-void KeyedStoreIC::Generate(MacroAssembler* a, ExternalReference const& b) { |
- UNIMPLEMENTED(); |
-} |
- |
-void KeyedStoreIC::GenerateExtendStorage(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void KeyedStoreIC::GenerateGeneric(MacroAssembler*a) { |
- UNIMPLEMENTED(); |
-} |
- |
-Object* KeyedStoreStubCompiler::CompileStoreField(JSObject* a, |
- int b, |
- Map* c, |
- String* d) { |
- UNIMPLEMENTED(); |
- return NULL; |
-} |
- |
-void LoadIC::ClearInlinedVersion(unsigned char* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void LoadIC::Generate(MacroAssembler* a, ExternalReference const& b) { |
- UNIMPLEMENTED(); |
-} |
- |
-void LoadIC::GenerateArrayLength(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void LoadIC::GenerateFunctionPrototype(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void LoadIC::GenerateMegamorphic(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void LoadIC::GenerateMiss(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void LoadIC::GenerateNormal(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void LoadIC::GenerateStringLength(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-bool LoadIC::PatchInlinedLoad(unsigned char* a, Object* b, int c) { |
- UNIMPLEMENTED(); |
- return false; |
-} |
Object* LoadStubCompiler::CompileLoadCallback(JSObject* a, |
JSObject* b, |
@@ -661,19 +385,6 @@ Object* LoadStubCompiler::CompileLoadInterceptor(JSObject* a, |
return NULL; |
} |
-MacroAssembler::MacroAssembler(void* buffer, int size) |
- : Assembler(buffer, size), |
- unresolved_(0), |
- generating_stub_(false), |
- allow_stub_calls_(true), |
- code_object_(Heap::undefined_value()) { |
- UNIMPLEMENTED(); |
-} |
- |
-void MacroAssembler::TailCallRuntime(ExternalReference const& a, int b) { |
- UNIMPLEMENTED(); |
-} |
- |
bool RegisterAllocator::IsReserved(int a) { |
UNIMPLEMENTED(); |
return false; |
@@ -691,18 +402,6 @@ StackFrame::Type StackFrame::ComputeType(StackFrame::State* a) { |
return NONE; |
} |
-void StoreIC::Generate(MacroAssembler* a, ExternalReference const& b) { |
- UNIMPLEMENTED(); |
-} |
- |
-void StoreIC::GenerateExtendStorage(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void StoreIC::GenerateMegamorphic(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
Object* StoreStubCompiler::CompileStoreCallback(JSObject* a, |
AccessorInfo* b, |
String* c) { |
@@ -772,34 +471,6 @@ byte* ArgumentsAdaptorFrame::GetCallerStackPointer() const { |
return NULL; |
} |
-void Builtins::Generate_Adaptor(MacroAssembler* a, Builtins::CFunctionId b) { |
- UNIMPLEMENTED(); |
-} |
- |
-void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void Builtins::Generate_FunctionApply(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void Builtins::Generate_FunctionCall(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void Builtins::Generate_JSConstructCall(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
-void Builtins::Generate_JSEntryTrampoline(MacroAssembler* a) { |
- UNIMPLEMENTED(); |
-} |
- |
void CodeGenerator::GenerateArgumentsAccess(ZoneList<Expression*>* a) { |
UNIMPLEMENTED(); |
} |