[svn:parrot] r38398 - in branches/pmc_pct: compilers/pmc compilers/pmc/src compilers/pmc/t compilers/pmc/tools config/gen/makefiles
bacek at svn.parrot.org
bacek at svn.parrot.org
Wed Apr 29 09:45:15 UTC 2009
Author: bacek
Date: Wed Apr 29 09:45:11 2009
New Revision: 38398
URL: https://trac.parrot.org/parrot/changeset/38398
Log:
Add handling of VTableInfo.
Added:
branches/pmc_pct/compilers/pmc/src/vtable_info.pir
branches/pmc_pct/compilers/pmc/src/vtable_info.pm
branches/pmc_pct/compilers/pmc/t/05-vtable-info.t
branches/pmc_pct/compilers/pmc/tools/
branches/pmc_pct/compilers/pmc/tools/vtable_pm.pl
Modified:
branches/pmc_pct/compilers/pmc/pmc.pir
branches/pmc_pct/config/gen/makefiles/pmc.in
Modified: branches/pmc_pct/compilers/pmc/pmc.pir
==============================================================================
--- branches/pmc_pct/compilers/pmc/pmc.pir Wed Apr 29 05:57:10 2009 (r38397)
+++ branches/pmc_pct/compilers/pmc/pmc.pir Wed Apr 29 09:45:11 2009 (r38398)
@@ -28,8 +28,10 @@
.tailcall $P0.'command_line'(args, 'encoding'=>'utf8', 'transcode'=>'ascii')
.end
-.include 'src/gen_compiler.pir'
.include 'src/nodes.pir'
+.include 'src/vtable_info.pir'
+.include 'src/gen_compiler.pir'
+.include 'src/gen_vtable_info.pir'
.include 'src/parser/gen_grammar.pir'
.include 'src/parser/gen_actions.pir'
.include 'src/builtins.pir'
Added: branches/pmc_pct/compilers/pmc/src/vtable_info.pir
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/src/vtable_info.pir Wed Apr 29 09:45:11 2009 (r38398)
@@ -0,0 +1,143 @@
+# Copyright (C) 2009, Parrot Foundation.
+# $Id$
+
+=head1 C<PMC::VTableInfo>
+
+Holds information about single VTable method.
+
+=cut
+
+.namespace ['PMC';'VTableInfo']
+
+.sub '' :load
+ .local pmc p6meta
+
+ p6meta = new 'P6metaclass'
+
+ p6meta.'new_class'('PMC::VTableInfo', 'parent' => 'Capture')
+
+.end
+
+=item new([attr1=>val1, attr2=>val2, ...])
+
+Create a new VTable of initialized with the given
+attributes. Returns the newly created node.
+
+=cut
+
+.sub 'new' :method
+ .param pmc adverbs :slurpy :named
+
+ .local pmc res
+ $P0 = self.'HOW'()
+ $P0 = getattribute $P0, 'parrotclass'
+ res = new $P0
+
+ res.'init'(adverbs :flat :named)
+
+ .return (res)
+.end
+
+=item init([attr1=>val1, attr2=>val2, ... ])
+
+Initializes VTableInfo
+
+=cut
+
+.sub 'init' :method
+ .param pmc adverbs :slurpy :named
+
+ .local pmc iter
+
+ iter = new 'Iterator', adverbs
+ adverbs_loop:
+ unless iter goto adverbs_end
+ $S0 = shift iter
+ $P0 = iter[$S0]
+ $P1 = find_method self, $S0
+ self.$P1($P0)
+ goto adverbs_loop
+ adverbs_end:
+ end:
+ .return (self)
+.end
+
+
+=item name
+
+Get/Set name.
+
+=cut
+
+.sub 'name' :method
+ .param string name :optional
+ .param int has_name
+ .tailcall self.'attr'('name', name, has_name)
+.end
+
+=item ret_type
+
+Get/Set ret_type of method.
+
+=cut
+
+.sub 'ret_type' :method
+ .param string type :optional
+ .param int has_type
+ .tailcall self.'attr'('ret_type', type, has_type)
+.end
+
+=item parameters
+
+Get/Set "C" parameters.
+
+=cut
+
+.sub 'parameters' :method
+ .param string parameters :optional
+ .param int has_parameters
+ .tailcall self.'attr'('parameters', parameters, has_parameters)
+.end
+
+=item is_write
+
+Get/set that vtable method updates PMC.
+
+=cut
+
+.sub 'is_write' :method
+ .param int is_write :optional
+ .param int has_is_write
+ .tailcall self.'attr'('is_write', is_write, has_is_write)
+.end
+
+=item attr(STR attrname, PMC value, INT has_value)
+
+Helper method for accessors. If C<has_value> is true then set
+the invocant's value of C<attrname> to C<value>. Returns the
+(resulting) value of C<attrname> in the invocant.
+
+=cut
+
+.sub 'attr' :method
+ .param string attrname
+ .param pmc value
+ .param int has_value
+ if has_value goto setattr
+ value = self[attrname]
+ unless null value goto value_done
+ value = new 'Undef'
+ value_done:
+ .return (value)
+ setattr:
+ self[attrname] = value
+ .return (value)
+.end
+
+
+
+# Local Variables:
+# mode: pir
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
Added: branches/pmc_pct/compilers/pmc/src/vtable_info.pm
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/src/vtable_info.pm Wed Apr 29 09:45:11 2009 (r38398)
@@ -0,0 +1,1732 @@
+# $Id$
+#
+# DO NOT EDIT THIS FILE. Generated from src/vtable.pl by
+# compilers/pmc/tool/vtable_pm.pl
+#
+# In future this file will be replaced by full featured PCT parser for
+# src/vtable.tbl
+#
+
+class PMC::VTableInfo;
+
+# Ordered list of VTable methods
+our @?VTABLES := build_vtable_list();
+our %?VTABLES;
+
+sub build_vtable_list() {
+ my @res;
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('absolute'),
+ :parameters('PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('add'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('add_attribute'),
+ :parameters('STRING* name, PMC* type'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('add_float'),
+ :parameters('FLOATVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('add_int'),
+ :parameters('INTVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('add_method'),
+ :parameters('STRING* method_name, PMC* sub_pmc'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('add_parent'),
+ :parameters('PMC* parent'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('add_role'),
+ :parameters('PMC* role'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('add_vtable_override'),
+ :parameters('STRING* vtable_name, PMC* sub_pmc'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('assign_pmc'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('assign_string_native'),
+ :parameters('STRING* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_and'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_and_int'),
+ :parameters('INTVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_ands'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_ands_str'),
+ :parameters('STRING* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_lsr'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_lsr_int'),
+ :parameters('INTVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_not'),
+ :parameters('PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_nots'),
+ :parameters('PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_or'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_or_int'),
+ :parameters('INTVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_ors'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_ors_str'),
+ :parameters('STRING* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_shl'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_shl_int'),
+ :parameters('INTVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_shr'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_shr_int'),
+ :parameters('INTVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_xor'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_xor_int'),
+ :parameters('INTVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_xors'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('bitwise_xors_str'),
+ :parameters('STRING* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('can'),
+ :parameters('STRING* method'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('clone'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('clone_pmc'),
+ :parameters('PMC* args'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('cmp'),
+ :parameters('PMC* value'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('cmp_num'),
+ :parameters('PMC* value'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('cmp_pmc'),
+ :parameters('PMC* value'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('cmp_string'),
+ :parameters('PMC* value'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('concatenate'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('concatenate_str'),
+ :parameters('STRING* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('decrement'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('defined'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('defined_keyed'),
+ :parameters('PMC* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('defined_keyed_int'),
+ :parameters('INTVAL key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('defined_keyed_str'),
+ :parameters('STRING* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('delete_keyed'),
+ :parameters('PMC* key'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('delete_keyed_int'),
+ :parameters('INTVAL key'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('delete_keyed_str'),
+ :parameters('STRING* key'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('delprop'),
+ :parameters('STRING* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('destroy'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('divide'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('divide_float'),
+ :parameters('FLOATVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('divide_int'),
+ :parameters('INTVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('does'),
+ :parameters('STRING* role'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('does_pmc'),
+ :parameters('PMC* role'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('elements'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('exists_keyed'),
+ :parameters('PMC* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('exists_keyed_int'),
+ :parameters('INTVAL key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('exists_keyed_str'),
+ :parameters('STRING* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('find_method'),
+ :parameters('STRING* method_name'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('floor_divide'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('floor_divide_float'),
+ :parameters('FLOATVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('floor_divide_int'),
+ :parameters('INTVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('freeze'),
+ :parameters('visit_info* info'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('get_attr_keyed'),
+ :parameters('PMC* key, STRING* idx'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('get_attr_str'),
+ :parameters('STRING* idx'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('get_bignum'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('get_bool'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('get_class'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('get_integer'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('get_integer_keyed'),
+ :parameters('PMC* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('get_integer_keyed_int'),
+ :parameters('INTVAL key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('get_integer_keyed_str'),
+ :parameters('STRING* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('get_iter'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('get_namespace'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('FLOATVAL'),
+ :name('get_number'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('FLOATVAL'),
+ :name('get_number_keyed'),
+ :parameters('PMC* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('FLOATVAL'),
+ :name('get_number_keyed_int'),
+ :parameters('INTVAL key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('FLOATVAL'),
+ :name('get_number_keyed_str'),
+ :parameters('STRING* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('get_pmc'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('get_pmc_keyed'),
+ :parameters('PMC* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('get_pmc_keyed_int'),
+ :parameters('INTVAL key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('get_pmc_keyed_str'),
+ :parameters('STRING* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void*'),
+ :name('get_pointer'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void*'),
+ :name('get_pointer_keyed'),
+ :parameters('PMC* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void*'),
+ :name('get_pointer_keyed_int'),
+ :parameters('INTVAL key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void*'),
+ :name('get_pointer_keyed_str'),
+ :parameters('STRING* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('STRING*'),
+ :name('get_repr'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('STRING*'),
+ :name('get_string'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('STRING*'),
+ :name('get_string_keyed'),
+ :parameters('PMC* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('STRING*'),
+ :name('get_string_keyed_int'),
+ :parameters('INTVAL key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('STRING*'),
+ :name('get_string_keyed_str'),
+ :parameters('STRING* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('getprop'),
+ :parameters('STRING* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('getprops'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_absolute'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_add'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_add_float'),
+ :parameters('FLOATVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_add_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_and'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_and_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_ands'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_ands_str'),
+ :parameters('STRING* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_lsr'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_lsr_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_not'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_nots'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_or'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_or_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_ors'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_ors_str'),
+ :parameters('STRING* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_shl'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_shl_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_shr'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_shr_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_xor'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_xor_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_xors'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_bitwise_xors_str'),
+ :parameters('STRING* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_concatenate'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_concatenate_str'),
+ :parameters('STRING* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_divide'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_divide_float'),
+ :parameters('FLOATVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_divide_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_floor_divide'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_floor_divide_float'),
+ :parameters('FLOATVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_floor_divide_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_logical_not'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_modulus'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_modulus_float'),
+ :parameters('FLOATVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_modulus_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_multiply'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_multiply_float'),
+ :parameters('FLOATVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_multiply_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_neg'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_pow'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_pow_float'),
+ :parameters('FLOATVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_pow_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_repeat'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_repeat_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_subtract'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_subtract_float'),
+ :parameters('FLOATVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('i_subtract_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('increment'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('init'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('init_pmc'),
+ :parameters('PMC* initializer'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('inspect'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('inspect_str'),
+ :parameters('STRING* what'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('instantiate'),
+ :parameters('PMC* sig'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('instantiate_str'),
+ :parameters('STRING* rep, INTVAL flags'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('opcode_t*'),
+ :name('invoke'),
+ :parameters('void* next'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('is_equal'),
+ :parameters('PMC* value'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('is_equal_num'),
+ :parameters('PMC* value'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('is_equal_string'),
+ :parameters('PMC* value'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('is_same'),
+ :parameters('PMC* value'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('isa'),
+ :parameters('STRING* _class'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('isa_pmc'),
+ :parameters('PMC* _class'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('logical_and'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('logical_not'),
+ :parameters('PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('logical_or'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('logical_xor'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('mark'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('modulus'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('modulus_float'),
+ :parameters('FLOATVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('modulus_int'),
+ :parameters('INTVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('morph'),
+ :parameters('PMC* type'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('multiply'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('multiply_float'),
+ :parameters('FLOATVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('multiply_int'),
+ :parameters('INTVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('STRING*'),
+ :name('name'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('neg'),
+ :parameters('PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('nextkey_keyed'),
+ :parameters('PMC* key, INTVAL what'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('nextkey_keyed_int'),
+ :parameters('INTVAL key, INTVAL what'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('nextkey_keyed_str'),
+ :parameters('STRING* key, INTVAL what'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('FLOATVAL'),
+ :name('pop_float'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('pop_integer'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('pop_pmc'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('STRING*'),
+ :name('pop_string'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('pow'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('pow_float'),
+ :parameters('FLOATVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('pow_int'),
+ :parameters('INTVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('push_float'),
+ :parameters('FLOATVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('push_integer'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('push_pmc'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('push_string'),
+ :parameters('STRING* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('remove_attribute'),
+ :parameters('STRING* name'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('remove_method'),
+ :parameters('STRING* method_name'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('remove_parent'),
+ :parameters('PMC* parent'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('remove_role'),
+ :parameters('PMC* role'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('remove_vtable_override'),
+ :parameters('STRING* vtable_name'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('repeat'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('repeat_int'),
+ :parameters('INTVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_attr_keyed'),
+ :parameters('PMC* key, STRING* idx, PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_attr_str'),
+ :parameters('STRING* idx, PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_bignum_int'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_bignum_num'),
+ :parameters('FLOATVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_bignum_str'),
+ :parameters('STRING* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_bool'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_integer_keyed'),
+ :parameters('PMC* key, INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_integer_keyed_int'),
+ :parameters('INTVAL key, INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_integer_keyed_str'),
+ :parameters('STRING* key, INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_integer_native'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_integer_same'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_number_keyed'),
+ :parameters('PMC* key, FLOATVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_number_keyed_int'),
+ :parameters('INTVAL key, FLOATVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_number_keyed_str'),
+ :parameters('STRING* key, FLOATVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_number_native'),
+ :parameters('FLOATVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_number_same'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_pmc'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_pmc_keyed'),
+ :parameters('PMC* key, PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_pmc_keyed_int'),
+ :parameters('INTVAL key, PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_pmc_keyed_str'),
+ :parameters('STRING* key, PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_pointer'),
+ :parameters('void* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_pointer_keyed'),
+ :parameters('PMC* key, void* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_pointer_keyed_int'),
+ :parameters('INTVAL key, void* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_pointer_keyed_str'),
+ :parameters('STRING* key, void* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_string_keyed'),
+ :parameters('PMC* key, STRING* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_string_keyed_int'),
+ :parameters('INTVAL key, STRING* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_string_keyed_str'),
+ :parameters('STRING* key, STRING* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_string_native'),
+ :parameters('STRING* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('set_string_same'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('setprop'),
+ :parameters('STRING* key, PMC* value'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('share'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('share_ro'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('FLOATVAL'),
+ :name('shift_float'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('shift_integer'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('shift_pmc'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('STRING*'),
+ :name('shift_string'),
+ :parameters(''),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('slice'),
+ :parameters('PMC* key, INTVAL flag'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('splice'),
+ :parameters('PMC* value, INTVAL offset, INTVAL count'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('substr'),
+ :parameters('INTVAL offset, INTVAL length, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('STRING*'),
+ :name('substr_str'),
+ :parameters('INTVAL offset, INTVAL length'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('subtract'),
+ :parameters('PMC* value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('subtract_float'),
+ :parameters('FLOATVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('PMC*'),
+ :name('subtract_int'),
+ :parameters('INTVAL value, PMC* dest'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('thaw'),
+ :parameters('visit_info* info'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('thawfinish'),
+ :parameters('visit_info* info'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('type'),
+ :parameters(''),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('INTVAL'),
+ :name('type_keyed'),
+ :parameters('PMC* key'),
+ :is_write(0)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('unshift_float'),
+ :parameters('FLOATVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('unshift_integer'),
+ :parameters('INTVAL value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('unshift_pmc'),
+ :parameters('PMC* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('unshift_string'),
+ :parameters('STRING* value'),
+ :is_write(1)
+ ));
+
+ @res.push(PMC::VTableInfo.new(
+ :ret_type('void'),
+ :name('visit'),
+ :parameters('visit_info* info'),
+ :is_write(0)
+ ));
+
+
+ @res;
+}
+
+sub vtable_list() {
+ our @?VTABLES;
+ @?VTABLES;
+}
+
+# Local Variables:
+# mode: perl6
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:
Added: branches/pmc_pct/compilers/pmc/t/05-vtable-info.t
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/05-vtable-info.t Wed Apr 29 09:45:11 2009 (r38398)
@@ -0,0 +1,26 @@
+#!parrot
+
+# Test that vtables initialised properly.
+
+.sub 'main' :main
+.include 'test_more.pir'
+ load_bytecode 'compilers/pmc/pmc.pbc'
+
+ plan(1)
+
+ $P0 = get_hll_global ["PMC"; "VTableInfo"], 'vtable_list'
+ $P1 = $P0()
+
+ $I0 = elements $P1
+ ok($I0, "We've got some vtables")
+.end
+
+
+# Don't forget to update plan!
+
+# Local Variables:
+# mode: cperl
+# cperl-indent-level: 4
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
Added: branches/pmc_pct/compilers/pmc/tools/vtable_pm.pl
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/tools/vtable_pm.pl Wed Apr 29 09:45:11 2009 (r38398)
@@ -0,0 +1,66 @@
+#!perl
+use warnings;
+use strict;
+
+=pod
+
+Temporary helper script for generating vtable.pm
+
+Invoke
+"perl -Ilib compilers/pmc/tools/vtable_pm.pl > compilers/pmc/src/vtable_info.pm"
+
+=cut
+
+use Parrot::Vtable;
+
+my $vtable = parse_vtable;
+
+print <<'HEADER';
+# $Id$
+#
+# DO NOT EDIT THIS FILE. Generated from src/vtable.pl by
+# compilers/pmc/tool/vtable_pm.pl
+#
+# In future this file will be replaced by full featured PCT parser for
+# src/vtable.tbl
+#
+
+class PMC::VTableInfo;
+
+# Ordered list of VTable methods
+our @?VTABLES := build_vtable_list();
+our %?VTABLES;
+
+HEADER
+
+
+print "sub build_vtable_list() {\n my \@res;\n";
+
+foreach (@$vtable) {
+ my $is_write = int exists $_->[5]{write};
+ print <<"VTABLE"
+ \@res.push(PMC::VTableInfo.new(
+ :ret_type('$_->[0]'),
+ :name('$_->[1]'),
+ :parameters('$_->[2]'),
+ :is_write($is_write)
+ ));
+
+VTABLE
+}
+
+print "\n \@res;\n}\n";
+
+print <<'FOOTER';
+
+sub vtable_list() {
+ our @?VTABLES;
+ @?VTABLES;
+}
+
+# Local Variables:
+# mode: perl6
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:
+FOOTER
Modified: branches/pmc_pct/config/gen/makefiles/pmc.in
==============================================================================
--- branches/pmc_pct/config/gen/makefiles/pmc.in Wed Apr 29 05:57:10 2009 (r38397)
+++ branches/pmc_pct/config/gen/makefiles/pmc.in Wed Apr 29 09:45:11 2009 (r38398)
@@ -16,10 +16,12 @@
SOURCES := \
pmc.pir \
+ src/nodes.pir \
+ src/vtable_info.pir \
src/parser/gen_grammar.pir \
src/parser/gen_actions.pir \
- src/nodes.pir \
src/gen_compiler.pir \
+ src/gen_vtable_info.pir \
src/builtins.pir
# the default target
@@ -41,6 +43,10 @@
$(PARROT) $(PARROT_ARGS) $(NQP) --output=src/gen_compiler.pir \
--target=pir src/compiler.pm
+src/gen_vtable_info.pir: $(NQP) $(PCT) src/vtable_info.pm
+ $(PARROT) $(PARROT_ARGS) $(NQP) --output=src/gen_vtable_info.pir \
+ --target=pir src/vtable_info.pm
+
# This is a listing of all targets, that are meant to be called by users
help:
@@ -72,7 +78,8 @@
pmc.pbc \
src/parser/gen_grammar.pir \
src/parser/gen_actions.pir \
- src/gen_compiler.pir
+ src/gen_compiler.pir \
+ src/gen_vtable_info.pir
clean:
More information about the parrot-commits
mailing list