summaryrefslogtreecommitdiff
path: root/mini_builtin.c
Commit message (Collapse)AuthorAgeFilesLines
* Rework `first_lineno` to be `int`.Samuel Williams2022-09-261-1/+1
|
* * expand tabs. [ci skip]git2021-06-171-11/+11
| | | | | Tabs were expanded because the file did not have any tab indentation in unedited lines. Please update your editor config, and use misc/expand_tabs.rb in the pre-commit hook.
* Enable frozen_string_literal in builtin_iseq_loadJohn Hawthorn2021-06-161-1/+14
| | | | | | Currently this has a fairly minor effect as strings are not used heavily inside the builtins (outside of warnings, requires, and errors). Hopefully this allows us to use strings in the future where appropriate.
* decouple internal.h headers卜部昌平2019-12-261-1/+2
| | | | | | | | | | | | | | | | | | Saves comitters' daily life by avoid #include-ing everything from internal.h to make each file do so instead. This would significantly speed up incremental builds. We take the following inclusion order in this changeset: 1. "ruby/config.h", where _GNU_SOURCE is defined (must be the very first thing among everything). 2. RUBY_EXTCONF_H if any. 3. Standard C headers, sorted alphabetically. 4. Other system headers, maybe guarded by #ifdef 5. Everything else, sorted alphabetically. Exceptions are those win32-related headers, which tend not be self- containing (headers have inclusion order dependencies).
* readable function names for inline functions.Koichi Sasada2019-12-131-1/+3
| | | | | | | Now, C functions written by __builtin_cexpr!(code) and others are named as "__builtin_inline#{n}". However, it is difficult to know what the function is. This patch rename them into "__builtin_foo_#{lineno}" when cexpr! is in 'foo' method.
* support cross-compilation.Koichi Sasada2019-12-111-0/+9
| | | | | | | | On cross-compilation, compiled binary can no be created because compiled binary should be created by same interpreter (on cross- compilation, host ruby is used to build ruby (BASERUBY)). So that cross-compilation system loads required scripts in text. It is same as miniruby.
* remove prelude.cKoichi Sasada2019-12-111-0/+1
| | | | | | | | | prelude.c is an automatically generated file by template/prelude.c.tmpl. However it does not contain any required functions. So remove it from dependency. Also miniprelude.c is included by mini_builtin.c and does not need to make miniprelude.o.
* use compiled binary for gem_prelude.rb.Koichi Sasada2019-12-111-5/+16
| | | | | `gem_prelude.rb` is not compiled yet. This patch compile it to compiled binary.
* vm_invoke_builtin_delegate with start index.Koichi Sasada2019-11-181-0/+5
| | | | | | | | | | | | | | | | | opt_invokebuiltin_delegate and opt_invokebuiltin_delegate_leave invokes builtin functions with same parameters of the method. This technique eliminate stack push operations. However, delegation parameters should be completely same as given parameters. (e.g. `def foo(a, b, c) __builtin_foo(a, b, c)` is okay, but __builtin_foo(b, c) is not allowed) This patch relaxes this restriction. ISeq has a local variables table which includes parameters. For example, the method defined as `def foo(a, b, c) x=y=nil`, then local variables table contains [a, b, c, x, y]. If calling builtin-function with arguments which are sub-array of the lvar table, use opt_invokebuiltin_delegate instruction with start index. For example, `__builtin_foo(b, c)`, `__builtin_bar(c, x, y)` is okay, and so on.
* Fix a typoYuichiro Kaneko2019-11-101-1/+1
|
* Full-path of builtin scripts no longer neededNobuyoshi Nakada2019-11-091-1/+1
|
* Embed builtin ruby scripts in miniprelude.cNobuyoshi Nakada2019-11-091-38/+4
| | | | | | Instead of reading from the files by the full-path at runtime. As rbinc files need to be included in distributed tarballs, the full-paths at the packaging are unavailable at compilation times.
* Revert "don't embed full-path."Koichi Sasada2019-11-091-24/+2
| | | | | | This reverts commit dfac2e9eb3d697e56d91151584f1d3cf9d2c79c9. It does not work if cwd is different from builddir...
* don't embed full-path.Koichi Sasada2019-11-091-2/+24
| | | | | | | miniruby load *.rb from srcdir. To specify file path, tool/mk_builtin_loader.rb embed full path of each *.rb file. However it prevent to pre-generation of required files for tarball. This patch generate srcdir/*.rb from __FILE__ information.
* Removed BOM [ci skip]Nobuyoshi Nakada2019-11-081-1/+1
|
* support builtin features with Ruby and C.Koichi Sasada2019-11-081-0/+89
Support loading builtin features written in Ruby, which implement with C builtin functions. [Feature #16254] Several features: (1) Load .rb file at boottime with native binary. Now, prelude.rb is loaded at boottime. However, this file is contained into the interpreter as a text format and we need to compile it. This patch contains a feature to load from binary format. (2) __builtin_func() in Ruby call func() written in C. In Ruby file, we can write `__builtin_func()` like method call. However this is not a method call, but special syntax to call a function `func()` written in C. C functions should be defined in a file (same compile unit) which load this .rb file. Functions (`func` in above example) should be defined with (a) 1st parameter: rb_execution_context_t *ec (b) rest parameters (0 to 15). (c) VALUE return type. This is very similar requirements for functions used by rb_define_method(), however `rb_execution_context_t *ec` is new requirement. (3) automatic C code generation from .rb files. tool/mk_builtin_loader.rb creates a C code to load .rb files needed by miniruby and ruby command. This script is run by BASERUBY, so *.rb should be written in BASERUBY compatbile syntax. This script load a .rb file and find all of __builtin_ prefix method calls, and generate a part of C code to export functions. tool/mk_builtin_binary.rb creates a C code which contains binary compiled Ruby files needed by ruby command.