Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 6 additions & 8 deletions common.mk
Original file line number Diff line number Diff line change
Expand Up @@ -205,13 +205,6 @@ $(PRISM_BUILD_DIR)/.time $(PRISM_BUILD_DIR)/util/.time:
$(Q) $(MAKEDIRS) $(@D)
@$(NULLCMD) > $@

$(PRISM_SRCDIR)/srcs.mk: $(HAVE_BASERUBY:yes=$(PRISM_SRCDIR)/templates/template.rb) \
$(HAVE_BASERUBY:yes=$(PRISM_SRCDIR)/generate-srcs.mk.rb)
$(ECHO) Updating prism/srcs.mk
$(BASERUBY) $(PRISM_SRCDIR)/generate-srcs.mk.rb > $@

srcs: $(PRISM_SRCDIR)/srcs.mk

EXPORTOBJS = $(DLNOBJ) \
localeinit.$(OBJEXT) \
loadpath.$(OBJEXT) \
Expand Down Expand Up @@ -1221,7 +1214,6 @@ incs: $(INSNS) {$(VPATH)}node_name.inc {$(VPATH)}known_errors.inc \
{$(VPATH)}vm_call_iseq_optimized.inc $(srcdir)/revision.h \
$(REVISION_H) \
$(UNICODE_DATA_HEADERS) $(ENC_HEADERS) \
$(top_srcdir)/prism/ast.h $(top_srcdir)/prism/diagnostic.h \
{$(VPATH)}id.h {$(VPATH)}probes.dmyh

insns: $(INSNS)
Expand Down Expand Up @@ -1310,6 +1302,11 @@ $(REVISION_H)$(yes_baseruby:yes=~disabled~):
# uncommon.mk: $(REVISION_H)
# $(MKFILES): $(REVISION_H)

# $(common_mk_includes) is set by config.status or GNUmakefile
common_mk__$(gnumake:yes=artifact)_ = uncommon.mk
common_mk_$(gnumake)_artifact_ = $(MKFILES)
$(common_mk__artifact_): $(srcdir)/common.mk $(common_mk_includes)

ripper_srcs: $(RIPPER_SRCS)

$(RIPPER_SRCS): $(srcdir)/parse.y $(srcdir)/defs/id.def
Expand Down Expand Up @@ -1982,3 +1979,4 @@ $(CROSS_COMPILING:yes=)builtin.$(OBJEXT): {$(VPATH)}mini_builtin.c
$(CROSS_COMPILING:yes=)builtin.$(OBJEXT): {$(VPATH)}miniprelude.c

!include $(srcdir)/prism/srcs.mk
!include $(srcdir)/depend
10 changes: 7 additions & 3 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -4698,9 +4698,12 @@ AC_CONFIG_FILES(Makefile:template/Makefile.in, [
sed '/^MISSING/s/\$U\././g;/^VCS *=/s#@VCS@#'"$VCS"'#;/^VCSUP *=/s#@VCSUP@#'"$VCSUP"'#' Makefile
echo; test x"$EXEEXT" = x || echo 'miniruby: miniruby$(EXEEXT)'
AS_IF([test "$gnumake" != yes], [
echo ['$(MKFILES): $(srcdir)/common.mk $(srcdir)/depend $(srcdir)/prism/srcs.mk']
sed ['s/{\$([^(){}]*)[^{}]*}//g;/^!/d'] ${srcdir}/common.mk ${srcdir}/depend
cat ${srcdir}/prism/srcs.mk
# extract NMake-style include list
set = `sed -n 's/^!include *//p' ${srcdir}/common.mk`
echo common_mk_includes "@S|@*" # generate the macro assignment
shift
common_mk_includes="`echo \"@S|@*\" | sed 's|\$(srcdir)|.|g'`"
(cd ${srcdir} && sed -f tool/prereq.status common.mk ${common_mk_includes})
AS_IF([test "$YJIT_SUPPORT" = yes], [
cat ${srcdir}/yjit/not_gmake.mk
echo ['$(MKFILES): ${srcdir}/yjit/not_gmake.mk']
Expand All @@ -4723,6 +4726,7 @@ AC_CONFIG_FILES(Makefile:template/Makefile.in, [
]) &&
test -z "`${MAKE-make} -f $tmpgmk info-program | grep '^PROGRAM=ruby$'`" &&
echo 'ruby: $(PROGRAM);' >> $tmpmk
rm -f uncommon.mk # remove stale uncommon.mk, it should be updated by GNUmakefile
test "$tmpmk" = "$tmpgmk" || rm -f "$tmpgmk"
]) && mv -f $tmpmk Makefile],
[EXEEXT='$EXEEXT' MAKE='${MAKE-make}' gnumake='$gnumake' GIT='$GIT' YJIT_SUPPORT='$YJIT_SUPPORT'])
Expand Down
6 changes: 1 addition & 5 deletions lib/syntax_suggest/api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -146,11 +146,7 @@ def self.record_dir(dir)
def self.valid_without?(without_lines:, code_lines:)
lines = code_lines - Array(without_lines).flatten

if lines.empty?
true
else
valid?(lines)
end
lines.empty? || valid?(lines)
end

# SyntaxSuggest.invalid? [Private]
Expand Down
142 changes: 142 additions & 0 deletions prism/srcs.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
PRISM_TEMPLATES_DIR = $(PRISM_SRCDIR)/templates
PRISM_TEMPLATE = $(PRISM_TEMPLATES_DIR)/template.rb
PRISM_CONFIG = $(PRISM_SRCDIR)/config.yml

srcs uncommon.mk: prism/.srcs.mk.time

prism/.srcs.mk.time:
prism/$(HAVE_BASERUBY:yes=.srcs.mk.time): \
$(PRISM_SRCDIR)/templates/template.rb \
$(PRISM_SRCDIR)/srcs.mk.in
$(BASERUBY) $(tooldir)/generic_erb.rb -c -t$@ -o $(PRISM_SRCDIR)/srcs.mk $(PRISM_SRCDIR)/srcs.mk.in

realclean-prism-srcs::
$(RM) $(PRISM_SRCDIR)/srcs.mk

realclean-srcs-local:: realclean-prism-srcs

main srcs: $(srcdir)/prism/api_node.c
$(srcdir)/prism/api_node.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/ext/prism/api_node.c.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) ext/prism/api_node.c $@

realclean-prism-srcs::
$(RM) $(srcdir)/prism/api_node.c

main incs: $(srcdir)/prism/ast.h
$(srcdir)/prism/ast.h: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/include/prism/ast.h.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) include/prism/ast.h $@

realclean-prism-srcs::
$(RM) $(srcdir)/prism/ast.h

main incs: $(srcdir)/prism/diagnostic.h
$(srcdir)/prism/diagnostic.h: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/include/prism/diagnostic.h.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) include/prism/diagnostic.h $@

realclean-prism-srcs::
$(RM) $(srcdir)/prism/diagnostic.h

main srcs: $(srcdir)/lib/prism/compiler.rb
$(srcdir)/lib/prism/compiler.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/compiler.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/compiler.rb $@

realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/compiler.rb

main srcs: $(srcdir)/lib/prism/dispatcher.rb
$(srcdir)/lib/prism/dispatcher.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/dispatcher.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/dispatcher.rb $@

realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/dispatcher.rb

main srcs: $(srcdir)/lib/prism/dot_visitor.rb
$(srcdir)/lib/prism/dot_visitor.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/dot_visitor.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/dot_visitor.rb $@

realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/dot_visitor.rb

main srcs: $(srcdir)/lib/prism/dsl.rb
$(srcdir)/lib/prism/dsl.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/dsl.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/dsl.rb $@

realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/dsl.rb

main srcs: $(srcdir)/lib/prism/inspect_visitor.rb
$(srcdir)/lib/prism/inspect_visitor.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/inspect_visitor.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/inspect_visitor.rb $@

realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/inspect_visitor.rb

main srcs: $(srcdir)/lib/prism/mutation_compiler.rb
$(srcdir)/lib/prism/mutation_compiler.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/mutation_compiler.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/mutation_compiler.rb $@

realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/mutation_compiler.rb

main srcs: $(srcdir)/lib/prism/node.rb
$(srcdir)/lib/prism/node.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/node.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/node.rb $@

realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/node.rb

main srcs: $(srcdir)/lib/prism/reflection.rb
$(srcdir)/lib/prism/reflection.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/reflection.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/reflection.rb $@

realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/reflection.rb

main srcs: $(srcdir)/lib/prism/serialize.rb
$(srcdir)/lib/prism/serialize.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/serialize.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/serialize.rb $@

realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/serialize.rb

main srcs: $(srcdir)/lib/prism/visitor.rb
$(srcdir)/lib/prism/visitor.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/visitor.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/visitor.rb $@

realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/visitor.rb

main srcs: $(srcdir)/prism/diagnostic.c
$(srcdir)/prism/diagnostic.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/diagnostic.c.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/diagnostic.c $@

realclean-prism-srcs::
$(RM) $(srcdir)/prism/diagnostic.c

main srcs: $(srcdir)/prism/node.c
$(srcdir)/prism/node.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/node.c.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/node.c $@

realclean-prism-srcs::
$(RM) $(srcdir)/prism/node.c

main srcs: $(srcdir)/prism/prettyprint.c
$(srcdir)/prism/prettyprint.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/prettyprint.c.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/prettyprint.c $@

realclean-prism-srcs::
$(RM) $(srcdir)/prism/prettyprint.c

main srcs: $(srcdir)/prism/serialize.c
$(srcdir)/prism/serialize.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/serialize.c.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/serialize.c $@

realclean-prism-srcs::
$(RM) $(srcdir)/prism/serialize.c

main srcs: $(srcdir)/prism/token_type.c
$(srcdir)/prism/token_type.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/token_type.c.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/token_type.c $@

realclean-prism-srcs::
$(RM) $(srcdir)/prism/token_type.c
40 changes: 40 additions & 0 deletions prism/srcs.mk.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<% # -*- ruby -*-
require_relative 'templates/template'

script = File.basename(__FILE__)
srcs = output ? File.basename(output) : script.chomp('.in')
mk = 'uncommon.mk'

# %>
PRISM_TEMPLATES_DIR = $(PRISM_SRCDIR)/templates
PRISM_TEMPLATE = $(PRISM_TEMPLATES_DIR)/template.rb
PRISM_CONFIG = $(PRISM_SRCDIR)/config.yml

srcs <%=%><%=mk%>: prism/.srcs.mk.time

prism/.srcs.mk.time:
prism/$(HAVE_BASERUBY:yes=.srcs.mk.time): \
$(PRISM_SRCDIR)/templates/template.rb \
$(PRISM_SRCDIR)/<%=%><%=script%>
$(BASERUBY) $(tooldir)/generic_erb.rb -c -t$@ -o $(PRISM_SRCDIR)/<%=%><%=srcs%> $(PRISM_SRCDIR)/<%=%><%=script%>

realclean-prism-srcs::
$(RM) $(PRISM_SRCDIR)/<%=%><%=srcs%>

realclean-srcs-local:: realclean-prism-srcs
<% Prism::Template::TEMPLATES.map do |t|
/\.(?:[ch]|rb)\z/ =~ t or next
s = '$(srcdir)/' + t.sub(%r[\A(?:(src)|ext|include)/]) {$1 && 'prism/'}
s.sub!(%r[\A\$(srcdir)/prism/], '$(PRISM_SRCDIR)/')
target = s.end_with?('.h') ? 'incs' : 'srcs'
# %>

main <%=%><%=target%>: <%=%><%=s%>
<%=%><%=s%>: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/<%=%><%=t%>.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) <%=%><%=t%> $@

realclean-prism-srcs::
$(RM) <%=%><%=s%>
<%
end
# %>
11 changes: 7 additions & 4 deletions proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -716,12 +716,15 @@ rb_func_proc_dup(VALUE src_obj)
VALUE proc_obj = TypedData_Make_Struct(rb_obj_class(src_obj), cfunc_proc_t, &proc_data_type, proc);

memcpy(&proc->basic, src_proc, sizeof(rb_proc_t));
RB_OBJ_WRITTEN(proc_obj, Qundef, proc->basic.block.as.captured.self);
RB_OBJ_WRITTEN(proc_obj, Qundef, proc->basic.block.as.captured.code.val);

const VALUE *src_ep = src_proc->block.as.captured.ep;
VALUE *ep = *(VALUE **)&proc->basic.block.as.captured.ep = proc->env + VM_ENV_DATA_SIZE - 1;
ep[VM_ENV_DATA_INDEX_FLAGS] = src_proc->block.as.captured.ep[VM_ENV_DATA_INDEX_FLAGS];
ep[VM_ENV_DATA_INDEX_ME_CREF] = src_proc->block.as.captured.ep[VM_ENV_DATA_INDEX_ME_CREF];
ep[VM_ENV_DATA_INDEX_SPECVAL] = src_proc->block.as.captured.ep[VM_ENV_DATA_INDEX_SPECVAL];
ep[VM_ENV_DATA_INDEX_ENV] = src_proc->block.as.captured.ep[VM_ENV_DATA_INDEX_ENV];
ep[VM_ENV_DATA_INDEX_FLAGS] = src_ep[VM_ENV_DATA_INDEX_FLAGS];
ep[VM_ENV_DATA_INDEX_ME_CREF] = src_ep[VM_ENV_DATA_INDEX_ME_CREF];
ep[VM_ENV_DATA_INDEX_SPECVAL] = src_ep[VM_ENV_DATA_INDEX_SPECVAL];
RB_OBJ_WRITE(proc_obj, &ep[VM_ENV_DATA_INDEX_ENV], src_ep[VM_ENV_DATA_INDEX_ENV]);

return proc_obj;
}
Expand Down
3 changes: 3 additions & 0 deletions template/GNUmakefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,8 @@ override UNICODE_TABLES_DEPENDENTS = \
$(UNICODE_TABLES_DATA_FILES)))),\
force,none)

# extract NMake-style include list
$(eval common_mk_includes := $(shell sed -n 's/^!include *//p' $(srcdir)/common.mk))

-include uncommon.mk
include $(srcdir)/defs/gmake.mk
4 changes: 2 additions & 2 deletions template/Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -426,8 +426,8 @@ $(MKFILES): config.status $(srcdir)/version.h $(ABI_VERSION_HDR)
$(MAKE) -f conftest.mk | grep '^AUTO_REMAKE$$' >/dev/null 2>&1 || \
{ echo "$@ updated, restart."; exit 1; }

uncommon.mk: $(srcdir)/common.mk $(srcdir)/depend
sed -f $(srcdir)/tool/prereq.status $(srcdir)/common.mk $(srcdir)/depend > $@
uncommon.mk: $(srcdir)/tool/prereq.status
sed -f $(srcdir)/tool/prereq.status $(srcdir)/common.mk $(common_mk_includes) > $@

.PHONY: reconfig
reconfig-args = $(srcdir)/$(CONFIGURE) $(yes_silence:yes=--silent) $(configure_args)
Expand Down
9 changes: 8 additions & 1 deletion tool/make-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -480,7 +480,14 @@ def package(vcs, rev, destdir, tmp = nil)
vars["UNICODE_VERSION"] = $unicode_version if $unicode_version
args = vars.dup
mk.gsub!(/@([A-Za-z_]\w*)@/) {args.delete($1); vars[$1] || ENV[$1]}
mk << commonmk.gsub(/\{\$([^(){}]*)[^{}]*\}/, "").gsub(/^!/, '-').sub(/^revision\.tmp::$/, '\& Makefile')
commonmk.gsub!(/^!(?:include \$\(srcdir\)\/(.*))?/) do
if inc = $1 and File.exist?(inc)
File.binread(inc).gsub(/^!/, '# !')
else
"#"
end
end
mk << commonmk.gsub(/\{\$([^(){}]*)[^{}]*\}/, "").sub(/^revision\.tmp::$/, '\& Makefile')
mk << <<-'APPEND'

update-download:: touch-unicode-files
Expand Down
2 changes: 1 addition & 1 deletion tool/prereq.status
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,4 @@ s,@srcdir@,.,g

s/@[A-Za-z][A-Za-z0-9_]*@//g
s/{\$([^(){}]*)}//g
s/^!/-/
s/^!/#!/
1 change: 0 additions & 1 deletion win32/Makefile.sub
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,6 @@ ACTIONS_ENDGROUP = @::
ABI_VERSION_HDR = $(hdrdir)/ruby/internal/abi.h

!include $(srcdir)/common.mk
!include $(srcdir)/depend

!ifdef SCRIPTPROGRAMS
!else if [echo>scriptbin.mk SCRIPTPROGRAMS = \]
Expand Down