зеркало из https://github.com/github/ruby.git
[ruby/yarp] Use templating to avoid duplicating the YARP version in many places
https://github.com/ruby/yarp/commit/9c359fd92e
This commit is contained in:
Родитель
dd07b70253
Коммит
f603497105
|
@ -523,6 +523,7 @@ require_relative "yarp/node"
|
||||||
require_relative "yarp/ripper_compat"
|
require_relative "yarp/ripper_compat"
|
||||||
require_relative "yarp/serialize"
|
require_relative "yarp/serialize"
|
||||||
require_relative "yarp/pack"
|
require_relative "yarp/pack"
|
||||||
|
require_relative "yarp/version"
|
||||||
|
|
||||||
if RUBY_ENGINE == "ruby" and !ENV["YARP_FFI_BACKEND"]
|
if RUBY_ENGINE == "ruby" and !ENV["YARP_FFI_BACKEND"]
|
||||||
require "yarp/yarp"
|
require "yarp/yarp"
|
||||||
|
|
|
@ -171,8 +171,10 @@ module YARP
|
||||||
# the YARP module.
|
# the YARP module.
|
||||||
private_constant :LibRubyParser
|
private_constant :LibRubyParser
|
||||||
|
|
||||||
# The version constant is set by reading the result of calling yp_version.
|
library_version = LibRubyParser.yp_version.read_string
|
||||||
VERSION = LibRubyParser.yp_version.read_string
|
if library_version != YARP::VERSION
|
||||||
|
raise "The YARP library version (#{library_version}) does not match the expected version (#{YARP::VERSION})"
|
||||||
|
end
|
||||||
|
|
||||||
def self.dump_internal(source, source_size, filepath)
|
def self.dump_internal(source, source_size, filepath)
|
||||||
LibRubyParser::YPBuffer.with do |buffer|
|
LibRubyParser::YPBuffer.with do |buffer|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module YARP
|
||||||
|
VERSION = "0.8.0"
|
||||||
|
end
|
|
@ -1,8 +1,10 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require_relative 'lib/yarp/version'
|
||||||
|
|
||||||
Gem::Specification.new do |spec|
|
Gem::Specification.new do |spec|
|
||||||
spec.name = "yarp"
|
spec.name = "yarp"
|
||||||
spec.version = "0.8.0"
|
spec.version = YARP::VERSION
|
||||||
spec.authors = ["Shopify"]
|
spec.authors = ["Shopify"]
|
||||||
spec.email = ["ruby@shopify.com"]
|
spec.email = ["ruby@shopify.com"]
|
||||||
|
|
||||||
|
@ -67,6 +69,7 @@ Gem::Specification.new do |spec|
|
||||||
"lib/yarp/pack.rb",
|
"lib/yarp/pack.rb",
|
||||||
"lib/yarp/ripper_compat.rb",
|
"lib/yarp/ripper_compat.rb",
|
||||||
"lib/yarp/serialize.rb",
|
"lib/yarp/serialize.rb",
|
||||||
|
"lib/yarp/version.rb",
|
||||||
"src/diagnostic.c",
|
"src/diagnostic.c",
|
||||||
"src/enc/yp_big5.c",
|
"src/enc/yp_big5.c",
|
||||||
"src/enc/yp_euc_jp.c",
|
"src/enc/yp_euc_jp.c",
|
||||||
|
|
|
@ -511,12 +511,12 @@ RUBY_FUNC_EXPORTED void
|
||||||
Init_yarp(void) {
|
Init_yarp(void) {
|
||||||
// Make sure that the YARP library version matches the expected version.
|
// Make sure that the YARP library version matches the expected version.
|
||||||
// Otherwise something was compiled incorrectly.
|
// Otherwise something was compiled incorrectly.
|
||||||
if (strcmp(yp_version(), EXPECTED_YARP_VERSION) != 0) {
|
if (strcmp(yp_version(), YP_VERSION) != 0) {
|
||||||
rb_raise(
|
rb_raise(
|
||||||
rb_eRuntimeError,
|
rb_eRuntimeError,
|
||||||
"The YARP library version (%s) does not match the expected version (%s)",
|
"The YARP library version (%s) does not match the expected version (%s)",
|
||||||
yp_version(),
|
yp_version(),
|
||||||
EXPECTED_YARP_VERSION
|
YP_VERSION
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -532,10 +532,6 @@ Init_yarp(void) {
|
||||||
rb_cYARPParseWarning = rb_define_class_under(rb_cYARP, "ParseWarning", rb_cObject);
|
rb_cYARPParseWarning = rb_define_class_under(rb_cYARP, "ParseWarning", rb_cObject);
|
||||||
rb_cYARPParseResult = rb_define_class_under(rb_cYARP, "ParseResult", rb_cObject);
|
rb_cYARPParseResult = rb_define_class_under(rb_cYARP, "ParseResult", rb_cObject);
|
||||||
|
|
||||||
// Define the version string here so that we can use the constants defined
|
|
||||||
// in yarp.h.
|
|
||||||
rb_define_const(rb_cYARP, "VERSION", rb_str_new2(EXPECTED_YARP_VERSION));
|
|
||||||
|
|
||||||
rb_define_const(rb_cYARP, "BACKEND", ID2SYM(rb_intern("CExtension")));
|
rb_define_const(rb_cYARP, "BACKEND", ID2SYM(rb_intern("CExtension")));
|
||||||
|
|
||||||
// First, the functions that have to do with lexing and parsing.
|
// First, the functions that have to do with lexing and parsing.
|
||||||
|
|
|
@ -5,8 +5,6 @@
|
||||||
#include <ruby/encoding.h>
|
#include <ruby/encoding.h>
|
||||||
#include "yarp.h"
|
#include "yarp.h"
|
||||||
|
|
||||||
#define EXPECTED_YARP_VERSION "0.8.0"
|
|
||||||
|
|
||||||
VALUE yp_source_new(yp_parser_t *parser);
|
VALUE yp_source_new(yp_parser_t *parser);
|
||||||
VALUE yp_token_new(yp_parser_t *parser, yp_token_t *token, rb_encoding *encoding, VALUE source);
|
VALUE yp_token_new(yp_parser_t *parser, yp_token_t *token, rb_encoding *encoding, VALUE source);
|
||||||
VALUE yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding);
|
VALUE yp_ast_new(yp_parser_t *parser, yp_node_t *node, rb_encoding *encoding);
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
#ifndef YARP_VERSION_H
|
||||||
|
#define YARP_VERSION_H
|
||||||
|
|
||||||
|
#define YP_VERSION_MAJOR <%= YARP_VERSION_MAJOR %>
|
||||||
|
#define YP_VERSION_MINOR <%= YARP_VERSION_MINOR %>
|
||||||
|
#define YP_VERSION_PATCH <%= YARP_VERSION_PATCH %>
|
||||||
|
#define YP_VERSION "<%= YARP_VERSION %>"
|
||||||
|
|
||||||
|
#endif // YARP_VERSION_H
|
|
@ -48,10 +48,6 @@ public class Loader {
|
||||||
private ConstantPool constantPool;
|
private ConstantPool constantPool;
|
||||||
private final Nodes.Source source;
|
private final Nodes.Source source;
|
||||||
|
|
||||||
private byte MAJOR_VERSION = (byte) 0;
|
|
||||||
private byte MINOR_VERSION = (byte) 8;
|
|
||||||
private byte PATCH_VERSION = (byte) 0;
|
|
||||||
|
|
||||||
private Loader(byte[] serialized, Nodes.Source source) {
|
private Loader(byte[] serialized, Nodes.Source source) {
|
||||||
this.buffer = ByteBuffer.wrap(serialized).order(ByteOrder.nativeOrder());
|
this.buffer = ByteBuffer.wrap(serialized).order(ByteOrder.nativeOrder());
|
||||||
this.source = source;
|
this.source = source;
|
||||||
|
@ -63,9 +59,9 @@ public class Loader {
|
||||||
expect((byte) 'R');
|
expect((byte) 'R');
|
||||||
expect((byte) 'P');
|
expect((byte) 'P');
|
||||||
|
|
||||||
expect(MAJOR_VERSION);
|
expect((byte) <%= YARP_VERSION_MAJOR %>);
|
||||||
expect(MINOR_VERSION);
|
expect((byte) <%= YARP_VERSION_MINOR %>);
|
||||||
expect(PATCH_VERSION);
|
expect((byte) <%= YARP_VERSION_PATCH %>);
|
||||||
|
|
||||||
// This loads the name of the encoding. We don't actually do anything
|
// This loads the name of the encoding. We don't actually do anything
|
||||||
// with it just yet.
|
// with it just yet.
|
||||||
|
|
|
@ -13,10 +13,6 @@ end
|
||||||
|
|
||||||
module YARP
|
module YARP
|
||||||
module Serialize
|
module Serialize
|
||||||
MAJOR_VERSION = 0
|
|
||||||
MINOR_VERSION = 8
|
|
||||||
PATCH_VERSION = 0
|
|
||||||
|
|
||||||
def self.load(input, serialized)
|
def self.load(input, serialized)
|
||||||
Loader.new(Source.new(input), serialized).load
|
Loader.new(Source.new(input), serialized).load
|
||||||
end
|
end
|
||||||
|
@ -64,7 +60,9 @@ module YARP
|
||||||
|
|
||||||
def load
|
def load
|
||||||
raise "Invalid serialization" if io.read(4) != "YARP"
|
raise "Invalid serialization" if io.read(4) != "YARP"
|
||||||
raise "Invalid serialization" if io.read(3).unpack("C3") != [MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION]
|
if io.read(3).unpack("C3") != [<%= YARP_VERSION_MAJOR %>, <%= YARP_VERSION_MINOR %>, <%= YARP_VERSION_PATCH %>]
|
||||||
|
raise "Invalid serialization version"
|
||||||
|
end
|
||||||
|
|
||||||
@encoding = Encoding.find(io.read(load_varint))
|
@encoding = Encoding.find(io.read(load_varint))
|
||||||
@input = input.force_encoding(@encoding).freeze
|
@input = input.force_encoding(@encoding).freeze
|
||||||
|
|
|
@ -4,6 +4,11 @@ require "erb"
|
||||||
require "fileutils"
|
require "fileutils"
|
||||||
require "yaml"
|
require "yaml"
|
||||||
|
|
||||||
|
require_relative "../lib/yarp/version"
|
||||||
|
|
||||||
|
YARP_VERSION = YARP::VERSION
|
||||||
|
YARP_VERSION_MAJOR, YARP_VERSION_MINOR, YARP_VERSION_PATCH = YARP_VERSION.split(".")
|
||||||
|
|
||||||
COMMON_FLAGS = 1
|
COMMON_FLAGS = 1
|
||||||
|
|
||||||
class Param
|
class Param
|
||||||
|
@ -312,6 +317,7 @@ end
|
||||||
TEMPLATES = [
|
TEMPLATES = [
|
||||||
"ext/yarp/api_node.c",
|
"ext/yarp/api_node.c",
|
||||||
"include/yarp/ast.h",
|
"include/yarp/ast.h",
|
||||||
|
"include/yarp/version.h",
|
||||||
"java/org/yarp/Loader.java",
|
"java/org/yarp/Loader.java",
|
||||||
"java/org/yarp/Nodes.java",
|
"java/org/yarp/Nodes.java",
|
||||||
"java/org/yarp/AbstractNodeVisitor.java",
|
"java/org/yarp/AbstractNodeVisitor.java",
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "yarp/util/yp_char.h"
|
#include "yarp/util/yp_char.h"
|
||||||
#include "yarp/util/yp_memchr.h"
|
#include "yarp/util/yp_memchr.h"
|
||||||
#include "yarp/util/yp_strpbrk.h"
|
#include "yarp/util/yp_strpbrk.h"
|
||||||
|
#include "yarp/version.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
Загрузка…
Ссылка в новой задаче