[erlang-questions] marco definition in beam_emu.c
Robert Raschke
rtrlists@REDACTED
Wed Sep 7 11:25:27 CEST 2011
On Tue, Sep 6, 2011 at 4:50 PM, caox <caox@REDACTED> wrote:
> Hi
>
> When reading the source code of beam_emu.c, I found the following marcos:
>
> #if defined(NO_JUMP_TABLE)
> # define OpCase(OpCode) case op_##OpCode: lb_##OpCode
> # define CountCase(OpCode) case op_count_##OpCode
> # define OpCode(OpCode) ((Uint*)op_##OpCode)
> # define Goto(Rel) {Go = (int)(Rel); goto emulator_loop;}
> # define LabelAddr(Addr) &&##Addr
> #else
> # define OpCase(OpCode) lb_##OpCode
> # define CountCase(OpCode) lb_count_##OpCode
> # define Goto(Rel) goto *(Rel)
> # define LabelAddr(Label) &&Label
> # define OpCode(OpCode) (&&lb_##OpCode)
> #endif
>
> which I couldn't understand. What is the meaning of 'op_##' and 'lb_##'?
>
> BR
>
>
It allows you to glue together a literal piece of text and a passed in
argument of the macro. For example, OpCase(FooBar) becomes case op_FooBar:
lb_FooBar .
Robby
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20110907/655da5b7/attachment.htm>
More information about the erlang-questions
mailing list