summaryrefslogtreecommitdiff
path: root/prism/extension.c
AgeCommit message (Collapse)Author
2024-03-07[ruby/prism] Remove restrict to fix windows 2015Kevin Newton
https://github.com/ruby/prism/commit/f0a2ce1c0e
2024-03-07[ruby/prism] Support parsing streamsKevin Newton
https://github.com/ruby/prism/commit/efdc2b7222
2024-03-06[ruby/prism] Expose types on diagnosticsKevin Newton
https://github.com/ruby/prism/commit/a735c2262f
2024-03-06[ruby/prism] Parse files from Ruby API using fread, not mmapKevin Newton
https://github.com/ruby/prism/commit/62d4376a53
2024-03-04[ruby/prism] Make alloc interface replaceableHASUMI Hitoshi
- Add `x` prefix to malloc, calloc, realloc, and free (eg: malloc -> xmalloc) - By default, they are replaced with stdlib's functions at build - You can use custom functions by defining `PRISM_CUSTOM_ALLOCATOR` macro https://github.com/ruby/prism/commit/7a878af619
2024-02-29[ruby/prism] Command line options as a bitsetKevin Newton
https://github.com/ruby/prism/commit/369ffbd57e
2024-02-29[ruby/prism] Resync RBI and test it in CIKevin Newton
https://github.com/ruby/prism/commit/4ef4032774
2024-02-27[ruby/prism] Support -p, -n, -a, and -l command line optionsKevin Newton
https://github.com/ruby/prism/commit/959eb506ca
2024-02-23[ruby/prism] Convert pm_integer_t to stringsKevin Newton
https://github.com/ruby/prism/commit/fa9a30ad91
2024-02-23[ruby/prism] Add some encoding debugging to make testing easierKevin Newton
https://github.com/ruby/prism/commit/0c042561c6
2024-02-22[ruby/prism] Regenerate snapshots using integer valuesKevin Newton
2024-02-22[ruby/prism] Parse numeric valuesKevin Newton
https://github.com/ruby/prism/commit/a6a552411c
2024-02-17[ruby/prism] Fix up GCC analyzerKevin Newton
https://github.com/ruby/prism/commit/2e8bc17528
2024-02-14Initialize the Prism::Source directly with all 3 fields for the C extensionBenoit Daloze
* Faster that way: $ ruby -Ilib -rprism -rbenchmark/ips -e 'Benchmark.ips { |x| x.report("parse") { Prism.parse("1 + 2") } }' 195.722k (± 0.5%) i/s rb_iv_set(): 179.609k (± 0.5%) i/s rb_funcall(): 190.030k (± 0.3%) i/s before this PR: 183.319k (± 0.4%) i/s
2024-02-14[ruby/prism] Serialize the newline_list to avoid recomputing it again laterBenoit Daloze
* Fixes https://github.com/ruby/prism/issues/2380 https://github.com/ruby/prism/commit/4eaaa90114
2024-02-06[ruby/prism] Implement file parsing error handlingeileencodes
This PR implements proper file parsing error handling. Previously `file_options` would call `pm_string_mapped_init` which would print an error from `perror`. However this wouldn't raise a proper Ruby error so it was just a string output. I've done the following: - Raise an error from `rb_syserr_fail` with the filepath in `file_options`. - No longer return `Qnil` if `file_options` returns false (because now it will raise) - Update `file_options` to return `static void` instead of `static bool`. - Update `file_options` and `profile_file` to check the type so when passing `nil` we see a `TypeError`. - Delete `perror` from `pm_string_mapped_init` - Update `FFI` backend to raise appropriate errors when calling `pm_string_mapped_init`. - Add tests for `dump_file`, `lex_file`, `parse_file`, `parse_file_comments`, `parse_lex_file`, and `parse_file_success?` when a file doesn't exist and for `nil`. - Updates the `bin/parse` script to no longer raise it's own `ArgumentError` now that we raise a proper error. Fixes: ruby/prism#2207 https://github.com/ruby/prism/commit/b2f7494ff5
2024-02-05[ruby/prism] Add another error type for raising argument errorsKevin Newton
https://github.com/ruby/prism/commit/f3030cb2b2
2024-02-01Sync to latest prismKevin Newton
2024-01-27[ruby/prism] Error follow-upKevin Newton
Split up the diagnostic levels so that error and warning levels aren't mixed. Also fix up deconstruct_keys implementation. https://github.com/ruby/prism/commit/bd3eeb308d Co-authored-by: Benoit Daloze <eregontp@gmail.com>
2024-01-26[ruby/prism] Add level to warnings and errors to categorize themBenoit Daloze
* Fixes https://github.com/ruby/prism/issues/2082 https://github.com/ruby/prism/commit/7a74576357
2024-01-22[ruby/prism] Return 1-indexed line numbersKevin Newton
https://github.com/ruby/prism/commit/ad17f58729
2024-01-17[ruby/prism] Document order of scopes in parsing optionsAndrew Konchin
https://github.com/ruby/prism/commit/908e92a695
2024-01-11[ruby/prism] Provide ability to format errorsKevin Newton
https://github.com/ruby/prism/commit/27985b0e7e
2024-01-02[ruby/prism] Document the version option on prism parseKevin Newton
https://github.com/ruby/prism/commit/eddd72a8ef
2024-01-02[ruby/prism] IndexTargetNode should always have ATTRIBUTE_WRITEKevin Newton
Because this is a user-facing change, we also need to deal with the fact that CRuby 3.3.0 was just released. In order to support workflows that want to parse exactly as CRuby parses in a specific version, this PR introduces a new option to the options struct that is "version". This allows you to specify that you want "3.3.0" parsing. I'm not sure if this is the correct solution. Another solution is to just fork and keep around the old branch for security patches. Or we could keep around a copy of the source files within this repository as another directory and only update when necessary. There are a lot of potential solutions here. Because this change is so small and the check for it is so minimal, I've decided to go with this enum. If this ends up entirely cluttering the codebase with version checks, we'll come up with another solution. But for now this works, so we're going to go in this direction for a bit until we determine it's no longer working. https://github.com/ruby/prism/commit/d8c7e6bd10
2023-12-07[ruby/prism] Remove warnings check from parse_success? methodKevin Newton
https://github.com/ruby/prism/commit/e30a241fb3
2023-12-06[ruby/prism] Provide flags for changing encodingsKevin Newton
https://github.com/ruby/prism/commit/e838eaff6f
2023-12-04[ruby/prism] Refactor pm_diagnostic_t and pm_comment_t to use pm_location_tLily Lyons
https://github.com/ruby/prism/commit/115b6a2fc6
2023-12-01[ruby/prism] Prism.parse_success?(source)Kevin Newton
A lot of tools use Ripper/RubyVM::AbstractSyntaxTree to determine if a source is valid. These tools both create an AST instead of providing an API that will return a boolean only. This new API only creates the C structs, but doesn't bother reifying them into Ruby/the serialization API. Instead it only returns true/false, which is significantly more efficient. https://github.com/ruby/prism/commit/7014740118
2023-11-30[ruby/prism] Correctly pass around const pm_encoding_t *Kevin Newton
https://github.com/ruby/prism/commit/ce4c67fb3a
2023-11-29[ruby/prism] Convert start line to signed integersJean Boussier
Ruby allows for 0 or negative line start, this is often used with `eval` calls to get a correct offset when prefixing a snippet. e.g. ```ruby caller = caller_locations(1, 1).first class_eval <<~RUBY, caller.path, caller.line - 2 # frozen_string_literal: true def some_method #{caller_provided_code_snippet} end RUBY ``` https://github.com/ruby/prism/commit/0d14ed1452
2023-11-28[ruby/prism] Move DATA parsing into its own parse result fieldKevin Newton
https://github.com/ruby/prism/commit/42b60b6e95
2023-11-14[ruby/prism] Rename librubyparser to libprismKevin Newton
librubyparser was an artifact of the prototype that was initially named ruby-parser. Instead, this renames it to libprism to be consistent with the actual name. https://github.com/ruby/prism/commit/8600b06811
2023-11-03[ruby/prism] Make old compilers happyKevin Newton
https://github.com/ruby/prism/commit/145a67d1c3
2023-11-03[ruby/prism] Rename suppress warnings to verboseKevin Newton
https://github.com/ruby/prism/commit/fbb30216ca
2023-11-03[ruby/prism] Split commentKevin Newton
We were previously holding a type field on Comment to tell what kind of comment it was. Instead, let's just use actual classes for this. https://github.com/ruby/prism/commit/e76830ca6e
2023-11-03[prism] Update to use new options APIsKevin Newton
2023-11-03[ruby/prism] Wire up the options through JavaScriptKevin Newton
https://github.com/ruby/prism/commit/81a9b2817f
2023-11-03[ruby/prism] Properly support the start line optionKevin Newton
https://github.com/ruby/prism/commit/33cc75a4b7
2023-11-03[ruby/prism] Wire up options through the FFI APIKevin Newton
https://github.com/ruby/prism/commit/f0aa8ad93b
2023-11-03[ruby/prism] Wire up options through the Ruby APIKevin Newton
https://github.com/ruby/prism/commit/8582d372a3
2023-11-03[ruby/prism] Create an options struct for passing all of the possible optionsKevin Newton
https://github.com/ruby/prism/commit/99e81619de
2023-11-01[ruby/prism] Fix up lintKevin Newton
https://github.com/ruby/prism/commit/77d4056766
2023-11-01[ruby/prism] Documentation for pm_string_tKevin Newton
https://github.com/ruby/prism/commit/ff1d2ec579
2023-11-01[ruby/prism] Fix up extension docsKevin Newton
https://github.com/ruby/prism/commit/cfd4431c3e
2023-10-30[ruby/prism] parse_inline_comments -> parse_commentsKevin Newton
https://github.com/ruby/prism/commit/bd4d248fd6
2023-10-27[ruby/prism] Parse inline commentsKevin Newton
https://github.com/ruby/prism/commit/44090d9f26
2023-10-26[ruby/prism] Match existing Ruby prettyprintKevin Newton
https://github.com/ruby/prism/commit/6d8358c083
2023-10-26[ruby/prism] Get general prettyprint structure workingKevin Newton
https://github.com/ruby/prism/commit/7c9cf63d4c
2023-10-16[ruby/prism] Attach magic comments to the parse resultKevin Newton
https://github.com/ruby/prism/commit/c7ef25a79a